package br.com.empresa.controller;

import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;

import javax.swing.JOptionPane;

import org.exolab.castor.xml.handlers.ValueOfFieldHandler;

import br.com.empresa.app.Principal;
import br.com.empresa.dao.FornecedorDAO;
import br.com.empresa.modelo.Fornecedor;
import br.com.empresa.modelo.TabelaFornecedor;
import javafx.beans.property.IntegerProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;

public class FornecedorController implements Initializable{

	

    @FXML
    private TableColumn clNome;

    @FXML
    private Button btExcluir;
    
    @FXML
    private TableView<TabelaFornecedor> tabelaFor;
    
    @FXML
    private TableColumn clCnpj;
    
    @FXML
    private Button btEditar;

    @FXML
    private Button bt_bem2;
    
    @FXML
    private TableColumn clTelefone;

    @FXML
    private TextField txProcurar;

    @FXML
    private TableColumn clCodigo;
    
   	
    @FXML
    private TextField txTelefone;

    @FXML
    private TextField txCnpj;

    @FXML
    private TextField txInscricao;

    @FXML
    private TextField txCodigo;

    @FXML
    private Button txLimpar;

    @FXML
    private TextField txRazao;

    @FXML
    private Button txSalvar;

    @FXML
    private TextField txNome;

    @FXML
    void eventSalvar(ActionEvent event) {
    	Fornecedor f = new Fornecedor();
    	f.setNomeFantasia(txNome.getText());
    	f.setRazaoSocial(txRazao.getText());
    	f.setInscricaoEstadual(txInscricao.getText());
    	f.setCnpj(txCnpj.getText());
    	f.setTelefone(txTelefone.getText());
    	FornecedorDAO dao = new FornecedorDAO();
    	
    	if (!txCodigo.getText().trim().equals("")){
    		f.setCodigo(Integer.parseInt(txCodigo.getText()));
    		dao.editar(f);
    	}else{
    		dao.inserir(f);
    	}
    	JOptionPane.showMessageDialog(null, "Salvo com sucesso");
    	CarregarTabela();
    	
    }

    @FXML
    void eventoLimpar(ActionEvent event) {
    	
    	txNome.setText("");
    	txRazao.setText("");
    	txInscricao.setText("");
    	txCnpj.setText("");
    	txTelefone.setText("");
    	txCodigo.setText("");
    	
    }
    
    @FXML
    void eventEditar(ActionEvent event) {
    	
    	IntegerProperty cdFornecedor = tabelaFor.getSelectionModel().getSelectedItem().codigoProperty();
    	
    	FornecedorDAO dao = new FornecedorDAO();
    	Fornecedor fSalvo = dao.listarPorid(cdFornecedor.intValue());
    	
    	txNome.setText(fSalvo.getNomeFantasia());
    	txRazao.setText(fSalvo.getRazaoSocial());
    	txInscricao.setText(fSalvo.getInscricaoEstadual());
    	txCnpj.setText(fSalvo.getCnpj());
    	txTelefone.setText(fSalvo.getTelefone());
    	txCodigo.setText(String.valueOf(fSalvo.getCodigo()));
    	    	    	    	
    }

    @FXML
    void eventExcluir(ActionEvent event) {
    	int linhaSelecionada = tabelaFor.getSelectionModel().getSelectedIndex();
    	IntegerProperty cdFornecedor = tabelaFor.getSelectionModel().getSelectedItem().codigoProperty();
    	FornecedorDAO dao = new FornecedorDAO();
    	//exclui banco
    	dao.excluir(cdFornecedor.intValue());
    	//exclui tabela
    	tabelaFor.getItems().remove(linhaSelecionada);
    	
    }
    
    

    @FXML
    void eventPesquisar(ActionEvent event) {
    	
    	FornecedorDAO dao = new FornecedorDAO();
		List<Fornecedor> fornecedores = dao.listarNome(txProcurar.getText());
		ObservableList<TabelaFornecedor> dados = FXCollections.observableArrayList();

		for(Fornecedor f: fornecedores){
			
			dados.add(new TabelaFornecedor(f));
			
		}
		
		clCodigo.setCellValueFactory(new PropertyValueFactory("codigo"));
		clNome.setCellValueFactory(new PropertyValueFactory("nomeFantasia"));
		clTelefone.setCellValueFactory(new PropertyValueFactory("telefone"));
		clCnpj.setCellValueFactory(new PropertyValueFactory("cnpj"));
		tabelaFor.setItems(dados);
    	
    }
    
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		
		CarregarTabela();
		
	}

	private void CarregarTabela() {
		FornecedorDAO dao = new FornecedorDAO();
		List<Fornecedor> fornecedores = dao.listar();
		ObservableList<TabelaFornecedor> dados = FXCollections.observableArrayList();

		for(Fornecedor f: fornecedores){
			
			dados.add(new TabelaFornecedor(f));
			
		}
		
		clCodigo.setCellValueFactory(new PropertyValueFactory("codigo"));
		clNome.setCellValueFactory(new PropertyValueFactory("nomeFantasia"));
		clTelefone.setCellValueFactory(new PropertyValueFactory("telefone"));
		clCnpj.setCellValueFactory(new PropertyValueFactory("cnpj"));
		tabelaFor.setItems(dados);
	}
	
	 @FXML
	    void eventVoltaBens(ActionEvent event) {
		 	
		 try{
			 
			 Parent root = FXMLLoader.load(getClass().getResource("/br/com/empresa/view/bens.fxml"));
			 Principal.SCENE.setRoot(root);
		 }catch (IOException ex){
			 ex.printStackTrace();
			 
		 }
		 
	    }

}

